#include <iostream>
using namespace std;
//函数模板
template <class T1>
void Swap(T1 &x, T1 &y)
{
    T1 temp = x;
    x = y;
    y = temp;
}
template<class T2>
T2 add(T2 a,T2 b){
    return a + b;
}
//函数模板的实例化
void test_Swap()
{
    //自动识别类型
    int a = 1, b = 2;
    Swap(a,b);
    double c = 1.1, d = 2.2;
    Swap(c, d);
    char e = 'x', f = 'y';
    Swap(e, f);
}
//函数模板的显示实例化
void test_add(){
    double a = 1.1, b = 2.2;
    cout <<"a+b=" <<add(a, b) << endl;
    //add<int> 模板的显示实例化
    cout<<"<int>a+b="<<add<int>(a,b)<<endl;
}


//类模板
template <class T3>
class A{
    public:
        T3 _a;
        T3 _b;
    public:
    A():_a(10),_b(20){}
    void print();
};
//类模板的实例化,需要在类名后面加<>,实例化才是真正的类
void test_class(){
    A<int> a;
    A<double> b;
}
//:类模板中函数放在类外定义，需要加载模板参数列表
template <class T3>
void A<T3>::print()
{
    cout << _a << " " << _b << endl;
}

int main()
{
    //test_add();

    return 0;
}